/*
* 主文件
* */

//引入express模块
const express = require('express');
// 创建app应用对象
const app = express();
//引入sha1模块
const sha1 = require('sha1')
//引入auth模块
const auth = require('./wechat/auth.js')
//引入wechat模块
const Wechat = require('./wechat/wechat')
//引入config模块
const {url}=require('./config')

//配置模板资源目录
app.set('views', './views');
//配置模板引擎
app.set('view engine', 'ejs');

//实例化对象
const wechatApi = new Wechat();

//页面路由
app.get('/search', async (req, res) => {
    /*
    * 生成 js-sdk 使用签名
    * 1.参与签名组合的四个参数：jsapi_ticket（临时票据）,noncestr（随机字符串）,timestamp（时间戳）,url(当前服务器地址)
    * 2.将其进行字典序排序，以‘&’拼接在一起
    * 3.进行sha1加密，最终生成 signature 签名
    * */
//     //获取 ticket
//     const {ticket} = await wechatApi.fentchTicket();
//     //获取随机字符串
//     const noncestr = Math.random().toString().split('.')[1];
//     //获取时间戳(精确到秒)
//     const timestamp = Date.now().toString().substr(0,10);
//     let arr = [
//         `jsapi_ticket=${ticket}`,
//         `noncestr=${noncestr}`,
//         `timestamp=${timestamp}`,
//         `url=${url}/search`
//     ];
//     //进行字典序排序并用&拼接，sha1加密生成 signature
//     const string = arr.sort().join('&');
//     const signature = sha1(string);
//     console.log(arr)
//     console.log(signature)
// //  将渲染好的页面返回给用户
//     res.render('search',{
//         signature,
//         noncestr,
//         timestamp
//     });
    //获取ticket
    const {ticket} = await wechatApi.fetchTicket();
    //获取随机字符串
    const noncestr = Math.random().toString().split('.')[1];
    //获取当前时间戳
    const timestamp = Date.now();
    //2. 按照key=value将其拼接在一起
    const params = [
        'jsapi_ticket=' + ticket,
        'noncestr=' + noncestr,
        'timestamp=' + timestamp,
        'url=' + url + '/search'
    ]
    // 3. 按照字典序排序，再使用'&'将四个参数拼接在一起
    const string = params.sort().join('&');
    // 4. sha1加密
    const signature = sha1(string);
    //将数据渲染到页面上
    res.render('search', {
        signature,
        noncestr,
        timestamp
    })
});


app.use(auth());


//监听端口号
app.listen(3000, err => {
    if (!err) {
        console.log('服务器启动成功了~~')
    }
});